// 我喜欢的音乐管理服务
import type { Song } from './musicApi';

export interface FavoriteItem extends Song {
  addTime: number; // 添加时间戳
}

class FavoritesService {
  private readonly STORAGE_KEY = 'music_favorites';

  // 获取我喜欢的音乐
  getFavorites(): FavoriteItem[] {
    try {
      const favoritesData = localStorage.getItem(this.STORAGE_KEY);
      if (favoritesData) {
        const favorites = JSON.parse(favoritesData) as FavoriteItem[];
        // 按添加时间倒序排列
        return favorites.sort((a, b) => b.addTime - a.addTime);
      }
    } catch (error) {
      console.error('获取收藏列表失败:', error);
    }
    return [];
  }

  // 添加到我喜欢
  addToFavorites(song: Song): boolean {
    try {
      const favorites = this.getFavorites();
      const exists = favorites.some(item => item.rid === song.rid);
      
      if (exists) {
        return false; // 已存在，返回false
      }

      const newFavorite: FavoriteItem = {
        ...song,
        addTime: Date.now()
      };

      favorites.unshift(newFavorite);
      localStorage.setItem(this.STORAGE_KEY, JSON.stringify(favorites));
      return true;
    } catch (error) {
      console.error('添加到收藏失败:', error);
      return false;
    }
  }

  // 从我喜欢中移除
  removeFromFavorites(rid: string): boolean {
    try {
      const favorites = this.getFavorites();
      const filteredFavorites = favorites.filter(item => item.rid !== rid);
      
      if (filteredFavorites.length === favorites.length) {
        return false; // 不存在，返回false
      }

      localStorage.setItem(this.STORAGE_KEY, JSON.stringify(filteredFavorites));
      return true;
    } catch (error) {
      console.error('从收藏中移除失败:', error);
      return false;
    }
  }

  // 检查是否已收藏（支持rid或hash）
  isFavorite(identifier: string): boolean {
    try {
      const favorites = this.getFavorites();
      // 同时检查rid和hash值
      return favorites.some(item => {
        // 直接匹配rid
        if (item.rid === identifier) return true;
        
        // 如果identifier看起来像是hash值（没有'-'分隔符），则从rid中提取hash进行比较
        if (!identifier.includes('-') && item.rid.includes('-')) {
          const itemHash = item.rid.split('-')[1];
          return itemHash === identifier;
        }
        
        // 如果item有hash字段，也进行比较
        if (item.hash && item.hash === identifier) return true;
        
        return false;
      });
    } catch (error) {
      console.error('检查收藏状态失败:', error);
      return false;
    }
  }

  // 切换收藏状态
  toggleFavorite(song: Song): boolean {
    if (this.isFavorite(song.rid)) {
      this.removeFromFavorites(song.rid);
      return false; // 返回false表示移除了收藏
    } else {
      return this.addToFavorites(song); // 返回true表示添加了收藏
    }
  }

  // 清空收藏列表
  clearFavorites(): void {
    try {
      localStorage.removeItem(this.STORAGE_KEY);
    } catch (error) {
      console.error('清空收藏列表失败:', error);
    }
  }

  // 获取收藏数量
  getFavoritesCount(): number {
    return this.getFavorites().length;
  }
}

export const favoritesService = new FavoritesService();